package summary.skills;

/**
 * 判断字符串是否合法
 */
public class Skill01 {

    /**
     * 技巧一：判断括号字符串是否合法
     * @param current
     * @return
     */
    public boolean valid(char[] current) {
        int balance = 0;
        for (char c: current) {
            if (c == '(') {
                ++balance;
            } else {
                --balance;
            }
            if (balance < 0) {
                return false;
            }
        }
        return balance == 0;
    }
    /**
     * 技巧二：判断回文字符串，一个循环，前加后减
     */
    /**
     * 技巧三：使用二进制进行枚举
     */
    /**
     * 技巧四：求2的幂或者4的幂
     */
    /**
     * 技巧五：用来统计元素的种类和个总类个数，一是可以使用数组（方便进行比较，但是限制连续），索引表示该元素（连续元素，从零开始或者转化为从零开始）；二是可以使用hashMap，方便
     * 技巧五plus：去重+排序也可以用数组，声明一个长度合适的数组。
     */
    /**
     * 技巧六(很重要)：如果需要频繁的查找某个元素或者判断该元素是否存在或者移除添加某个元素，而该元素存放在数组、字符串中中，可以将该元素存放到hash中。
     */
    /**
     * 技巧七：动态滑动窗口，让他的初始值为1，然后逐渐变大，左右边界均未0，(0, 0] 左开右闭区间。
     */
    /**
     * 技巧八：由于动态规划确定转换方程十分重要，所以最后一步至关重要，一般是要尽量让最后一步成功。如何
     * 达到最后一步，并且能更好的转换成子问题。
     */
    /**
     * 技巧九：学会设置标志位，标志着程序结束。比如：标志着回溯结束，标志着多层循环结束。
     */
    /**
     *技巧十：找到一个数组中大于该数的一部分和小于概述的一部分，可以设指向小于的那一部分的最后一个，初始化时，
     */
}
